///////////////////////////////////////////////////////////////////////////////////////////////////
/// \file all_data.h
///
/// \brief   header file for AllData class
///
///////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef PCPS_ALL_DATA_HEADER
#define PCPS_ALL_DATA_HEADER

#include <src/pcps.h>
#include <src/input.h>
#include <src/hamiltonian.h>
#include <src/wavefunction.h>

namespace pcps {

  ///////////////////////////////////////////////////////////////////////////////////////////////////
  /// \brief  A simple class used to hold the data on which the user's commands will act.
  ///
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  class AllData {

    public:

      /// \brief  constructor
      AllData() : userinp(), hd(userinp), hc(userinp), wd(), wc() {}

      /// \brief  The user input options.
      pcps::Input userinp;

      /// \brief  The real number Hamiltonian.
      pcps::Hamiltonian<double> hd;

      /// \brief  The complex number Hamiltonian.
      pcps::Hamiltonian<std::complex<double> > hc;

      /// \brief  The real number wavefunction.
      pcps::Wavefunction<double> wd;

      /// \brief  The complex number wavefunction.
      pcps::Wavefunction<std::complex<double> > wc;

  };

}

#endif
